//package com.ustcinfo.study.mr.mouyiquan;
//
//import org.apache.hadoop.fs.Path;
//import org.apache.hadoop.io.IntWritable;
//import org.apache.hadoop.io.Text;
//import org.apache.hadoop.mapreduce.Job;
//import org.apache.hadoop.mapreduce.Mapper;
//import org.apache.hadoop.mapreduce.Reducer;
//import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
//import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
//
//import java.io.IOException;
//
///**
// * @Author: Yiquan Mou
// * @Email: ctbumyq@gmail.com
// * @Description:
// * @Date: Created in 21:56 2018/7/31
// */
//public class TestWorldCount {
//    //定义WorldCountMapper类
//    private static class MyMapper extends Mapper<Object,Text,Text,IntWritable>{
//        //定义一个单词数为1，用于累加计数
//        private static  final IntWritable count = new IntWritable(1);
//
//        /**
//         *
//         * @param key
//         * @param value 行文本
//         * @param context   map的上下文，用于数据的存储利用
//         *  拆分部分
//         */
//        @Override
//        protected void map(Object key,Text value,Context context) throws IOException,InterruptedException{
//
//            String line = value.toString(); //将一行数据转换为String类型
//            String[] arr = line.split("[\\W]"); //根据正则表达式进行拆分，这里根据非单词字符拆分
//            for (int i=0;i<arr.length;i++){
//                Text word = new Text();
//                word.set(arr[i]);
//                context.write(word,count);
//            }
//
//        }
//    }
//
//    /**
//     * 定义Reducer
//     * 这里的前两个参数来自于Mapper里面设置的word与count
//     * 后连个参数为返回值
//     */
//    private static class MyReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
//        @Override
//        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
//            int sum = 0;
//            for (IntWritable val : values){
//                sum += val.get();   //这里的val.get()取到的值可能不只是1，在Reducer之前混淆会执行Combiner进行Mapper内合并
//            }
//            context.write(key,new IntWritable(sum));
//        }
//    }
//
//    public static void main(String[] args) throws IOException,ClassNotFoundException,InterruptedException{
//        //生成Job对象
//        Job job = Job.getInstance();
//        //设置job名称，方便查找
//        job.setJobName("myq_word_count");
//        //设置入口文件
//        job.setJarByClass(TestWorldCount.class);
//        //设置Mapper类
//        job.setMapperClass(MyMapper.class);
//        //设置Combiner类
//        job.setCombinerClass(MyReducer.class);
//        //设置Reducer类
//        job.setReducerClass(MyReducer.class);
//        //设置输出
//        job.setOutputKeyClass(Text.class);
//        job.setOutputValueClass(IntWritable.class);
//        FileInputFormat.addInputPath(job,new Path(args[0]));
//        FileOutputFormat.setOutputPath(job,new Path(args[1]));
//
//        //设置程序结束值（0为正常结束，-1位错误结束）
//        int status = job.waitForCompletion(true) ? 0 : -1;
//        System.exit(status);
//    }
//}
